using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TraceNetworkTools
{
    /// <summary>
    /// <para>Create Trace Network</para>
    /// <para>Creates a trace network.</para>
    /// <para>创建追踪网络。</para>
    /// </summary>    
    [DisplayName("Create Trace Network")]
    public class CreateTraceNetwork : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateTraceNetwork()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_dataset">
        /// <para>Input Feature Dataset</para>
        /// <para>The feature dataset that will contain the trace network.</para>
        /// <para>将包含追踪网络的要素数据集。</para>
        /// </param>
        /// <param name="_in_trace_network_name">
        /// <para>Trace Network Name</para>
        /// <para>The name of the trace network that will be created.</para>
        /// <para>将创建的追踪网络的名称。</para>
        /// </param>
        public CreateTraceNetwork(object _in_feature_dataset, object _in_trace_network_name)
        {
            this._in_feature_dataset = _in_feature_dataset;
            this._in_trace_network_name = _in_trace_network_name;
        }
        public override string ToolboxName => "Trace Network Tools";

        public override string ToolName => "Create Trace Network";

        public override string CallName => "tn.CreateTraceNetwork";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_feature_dataset, _in_trace_network_name, _input_junctions, _input_edges, _out_trace_network];

        /// <summary>
        /// <para>Input Feature Dataset</para>
        /// <para>The feature dataset that will contain the trace network.</para>
        /// <para>将包含追踪网络的要素数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_dataset { get; set; }


        /// <summary>
        /// <para>Trace Network Name</para>
        /// <para>The name of the trace network that will be created.</para>
        /// <para>将创建的追踪网络的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Trace Network Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_trace_network_name { get; set; }


        /// <summary>
        /// <para>Input Junctions</para>
        /// <para>The names of the point feature classes in the feature dataset to include in the trace network.</para>
        /// <para>要素数据集中要包含在追踪网络中的点要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Junctions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _input_junctions { get; set; } = null;


        /// <summary>
        /// <para>Input Edges</para>
        /// <para><xdoc>
        ///   <para>The line feature classes and associated connectivity policy to include in the trace network.</para>
        ///   <bulletList>
        ///     <bullet_item>Class Name—The name of the line feature class in the feature dataset to include in the trace network.</bullet_item><para/>
        ///     <bullet_item>Connectivity Policy—The associated connectivity policy of the specified feature class.
        ///     <bulletList>
        ///       <bullet_item>Simple edge—Resources will flow from one end of the edge and out the other end.  </bullet_item><para/>
        ///       <bullet_item>Complex edge—Resources will be siphoned off along the length of the edge.  </bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要包含在追踪网络中的线要素类和关联的连通性策略。</para>
        ///   <bulletList>
        ///     <bullet_item>类名称 - 要素数据集中要包含在追踪网络中的线要素类的名称。</bullet_item><para/>
        /// <bullet_item>连通性策略 - 指定要素类的关联连通性策略。
        ///     <bulletList>
        ///       <bullet_item>简单边 - 资源将从边的一端流出，从另一端流出。</bullet_item><para/>
        ///       <bullet_item>复杂边 - 资源将沿边的长度被抽走。</bullet_item><para/>
        ///     </bulletList>
        ///     </bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Edges")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _input_edges { get; set; } = null;


        /// <summary>
        /// <para>Output Trace Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Trace Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_trace_network { get; set; }


        public CreateTraceNetwork SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}